package cz.vse.adventura.po1715.xforv00_forejt.hra;

import cz.pecinovsky.english.pojj.adv_framework.game_gui.IGameG;
import cz.pecinovsky.english.pojj.adv_framework.game_txt.IGame;
import cz.pecinovsky.english.pojj.adv_framework.test_util._Test_101;
import cz.pecinovsky.english.pojj.adv_framework.test_util._Test_115;
import cz.vse.adventura.po1715.xforv00_forejt.hra.Hra;



/*******************************************************************************
 * Třída {@code TestZadanéHry} je hlavní třídou projektu,
 * sloužící k zadání testované hry přímo do zdrojového kódu
 * a k jejímu následnému otestování.
 *
 * @author    Rudolf PECINOVSKÝ
 * @version   0.00.000
 */
public class TestZadanéHry
{
    private static final String T_101 = "101";
    private static final String T_115 = "115";
    
    
    
    /***************************************************************************
     * Otestuje zadanou hru základním, chybovým a kontrolním scénářem
     * (kontrolní scénář si test_101 vygeneruje sám).
     * 
     * @param hra Testovaná hra
     */
    public static void test_101(IGame hra)
    {
        _Test_101 test = _Test_101.getInstance(hra);
        test.testGame();
    }

    
    /***************************************************************************
     * Otestuje zadanou hru základním, chybovým a kontrolním scénářem
     * (kontrolní scénář si test_101 vygeneruje sám).
     * 
     * @param hra Testovaná hra
     */
    public static void test_115(IGameG hra)
    {
        _Test_115 test = _Test_115.getInstance(hra);
        boolean verified = test.verifyGame();
        if (verified) {

        test.playGameByTestScenario();

        }

    }
    

    
    /***************************************************************************
     * @param args Parametry příkazového řádku
     */
    public static void main(String[] args)
    {
        IGame  hra;
        String test;
        
    RIGHT:      //návěští - to můžu ukončit breakem
        {
            if (args.length < 2) {
                hra  = Hra.getHra();
                test = T_115;
            }
            else {
                /*if ("SKOLA".equalsIgnoreCase(args[0])) {
                    hra = cz.pecinovsky.english.pojj.adv_demo.
                          cesta_školou.hra.HraCestaSkolou.getHra();
                }
                else if ("BYT".equalsIgnoreCase(args[0])) {
                    hra = cz.pecinovsky.english.pojj.adv_demo.
                          byt_lednička.hra.Hra_BytLednička.getHra();
                }*/
                if ("VIZUM".equalsIgnoreCase(args[0])) {
                    hra = Hra.getHra();
                }
                else {
                    break RIGHT;
                }
                test = args[1];
            }
            
            if (T_101.equals(test)) {
                test_101(hra);                
            }
            else if (T_115.equals(test)) {
                test_115((IGameG) hra);                
            }
            else {
                break RIGHT;
            }
            return;
        }
        throw new RuntimeException(
                "\nNeočekávaný parametr příkazového řádku");
    }

    /** Soukromý konstruktor zabraňující vytvoření instance.*/
    private TestZadanéHry() {}
}
